<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
<button id="btn">点击</button>
</body>
<script>
    // //防抖
    // function debounce(fn,wait){
    //     let timer = null;
    //     return function(){
    //         let context = this;
    //         let arg = arguments;
    //         if(timer){
    //             clearTimeout(timer)
    //         }
    //         timer = setTimeout(()=>{
    //             fn.apply(context,arg)
    //         },wait)
    //     }
    // }
    // //立即执行 防抖
    document.getElementById('btn').onclick = throttle(()=>{
        console.log('hello')
    },2000,true)

    function debounce(func, wait, immediate) {
        let timeout;
        return function(){
            let context = this;
            let arg = arguments;
            if(timeout){
                clearTimeout(timeout)
            }
            if(immediate){
                let callNow = !timeout;
               timer = setTimeout(()=>{
                    timeout = null;
                },wait)
                if(callNow){
                    func.apply(context,arg)
                }
            }else{
                setTimeout(()=>{
                    func.apply(context,arg)
                },wait)
            }
        }
    }
        // function throttle(func,wait){
        //    let timer;
        //    return function(){
        //        let context = this;
        //        let args = arguments;
        //        if(!timer){
        //            timer = setTimeout(()=>{
        //                func.apply(context,args)
        //                timer = null;
        //            },wait)
        //        }
        //    }
        // }

        // function throttle(func,wait){
        //     let context,args;
        //     let previous =0;
        //     return function(){
        //         let now = +new Date();
        //         context = this;
        //         args = arguments;
        //         if(now - previous > wait){
        //             func.apply(context,args)
        //             previous = now;
        //         }
        //     }
        // }
</script>

</html>